package com.hxzon.aixzsecretary.ui;

import java.awt.Component;
import java.util.Iterator;
import java.util.Observable;
import java.util.Observer;

import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import org.dom4j.Element;

import com.hxzon.aixzsecretary.util.AixzObservable;
import com.hxzon.aixzsecretary.util.AixzSensor;
import com.hxzon.aixzsecretary.xml.AixzMessageProcessor;

public class BacklogList extends JPanel implements Observer {
	// JTable table;
	// DefaultTableModel model;
	// AixzSensor sensor;
	// String date;
	// AixzMessageProcessor xml;
	//
	// public AixzBacklogList(AixzMessageProcessor xml) {
	// JPanel cPane = this;
	// cPane.setLayout(null);
	// table = new JTable();
	//
	// JScrollPane scroll = new JScrollPane(table);
	// scroll.setBounds(2, 2, 240, 180);
	// cPane.add(scroll);
	//
	// model = new MyTableModel();// (DefaultListModel) (list.getModel());
	// // model=new DefaultListModel();
	// table.setModel(model);
	// table.setDefaultRenderer(JButton.class, new ButtonCellRenderer());
	// table.setDefaultRenderer(String.class, new MyCellRenderer());
	// this.xml = xml;
	// }
	//
	// public void observe(AixzObservable object) {
	// this.sensor = object.getSensor();
	// sensor.addObserver(this);
	// update(sensor, null);
	// System.out.println(date);
	// }
	//
	// public void update(Observable subject, Object object) {
	// xml.openXML();
	// date = (String) sensor.getData();
	// // date="date[@value='"+date+"']";
	// clearItem();
	// Iterator messages = xml.getMessages(date);
	// if (messages == null){
	// addItem(null);// today in none
	// }
	// else
	// while (messages.hasNext()) {
	// Element message = (Element) messages.next();
	// String title = xml.getMessageDetail(message, "title");
	// String content = xml.getMessageDetail(message, "content");
	// String time = xml.getMessageDetail(message, "time");
	// Object[] data = { title, content, time, new JButton("hello") };
	// // addItem(xml.getMessageDetail(message,"content"));//"@id"
	// addItem(data);
	// }
	// }
	//
	// public void addItem(Object[] item) {
	// model.addRow(item);
	// }
	//
	// public void clearItem() {
	// // model.clear();
	// }
	//
	// class MyListCellRenderer extends DefaultListCellRenderer {
	// // extends JLabel
	//
	// public Component getListCellRendererComponent(JList list, Object value,
	// int index, boolean isSelected, boolean cellHasFocus) {
	// super.getListCellRendererComponent(list, value, index, isSelected,
	// cellHasFocus);
	// if (value == null) {
	// setText("today is none");
	// return this;
	// }
	// Element message = (Element) value;
	// String title = xml.getMessageDetail(message, "title");
	// String content = xml.getMessageDetail(message, "content");
	// String time = xml.getMessageDetail(message, "time");
	// setText(time + " " + title);
	// StringBuilder sb = new StringBuilder(content);
	// // String s=value.toString();
	// sb.insert(0, "<html><p>");
	// for (int i = sb.length(); i > 20; i -= 20) {
	// sb.insert(i, "</p><p>");
	// }
	// sb.append("</p></html>");
	// setToolTipText(sb.toString());
	// return this;
	// }
	// }
	//
	// class ButtonCellRenderer implements TableCellRenderer {
	// private JButton button = new JButton("hello");
	//
	// public Component getTableCellRendererComponent(JTable table,
	// Object value, boolean isSelected, boolean hasFocus, int row,
	// int column) {
	// return button;
	// }
	// }
	//
	// class MyCellRenderer implements TableCellRenderer {
	// private JLabel label = new JLabel();
	//
	// public Component getTableCellRendererComponent(JTable table,
	// Object value, boolean isSelected, boolean hasFocus, int row,
	// int column) {
	// label.setText(value.toString());
	// return label;
	// }
	// }
	//
	// class MyTableModel extends DefaultTableModel {
	// public Class getColumnClass(int c) {
	// return getValueAt(0, c).getClass();
	// }
	//
	// }
	//
	// public static void main(String[] args) {
	// JFrame frame = new JFrame();
	// JPanel cPane = (JPanel) frame.getContentPane();
	// cPane.setLayout(null);
	//
	// AixzCalendar calendar = new AixzCalendar();
	// calendar.setBounds(2, 245, 240, 180);
	// cPane.add(calendar);
	//
	// AixzMessageProcessor xml = new AixzMessageProcessor();
	// xml.openXML();
	//
	// AixzBacklogList backlogList = new AixzBacklogList(xml);
	// backlogList.observe(calendar);
	// backlogList.setBounds(2, 2, 340, 200);
	// cPane.add(backlogList);
	//
	// frame.setSize(247, 600);
	// frame.setResizable(true);
	// frame.setTitle("sectetary");
	// frame.setVisible(true);
	// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//
	// }
	JList list;
	DefaultListModel model;
	AixzSensor sensor;
	String date;
	AixzMessageProcessor xml;

	public BacklogList() {
		JPanel cPane = this;
		cPane.setLayout(null);
		list = new JList();
		list.setCellRenderer(new MyListCellRenderer());
		JScrollPane scroll = new JScrollPane(list);
		scroll.setBounds(2, 2, 240, 180);
		cPane.add(scroll);

		model = new DefaultListModel();// (DefaultListModel) (list.getModel());
		list.setModel(model);
		xml = AixzMessageProcessor.getInstance();
	}

	public void observe(AixzObservable object) {
		this.sensor = object.getSensor();
		sensor.addObserver(this);
		update(sensor, null);
		System.out.println(date);
	}

	public void update(Observable subject, Object object) {
		xml.openXML();
		date = (String) sensor.getData();
		// date="date[@value='"+date+"']";
		clearItem();
		Iterator messages = xml.getMessages(date);
		if (messages == null)
			addItem(null);// today in none
		else
			while (messages.hasNext()) {
				Element message = (Element) messages.next();
				// addItem(xml.getMessageDetail(message,"content"));//"@id"
				addItem(message);
			}

	}

	public void addItem(Object item) {
		model.addElement(item);

	}

	public void clearItem() {
		model.clear();
	}

	class MyListCellRenderer extends DefaultListCellRenderer {// extends
		// JLabel

		public Component getListCellRendererComponent(JList list, Object value,
				int index, boolean isSelected, boolean cellHasFocus) {
			super.getListCellRendererComponent(list, value, index, isSelected,
					cellHasFocus);
			if (value == null) {
				setText("today is none");
				return this;
			}
			Element message = (Element) value;
			String title = xml.getMessageDetail(message, "title");
			String content = xml.getMessageDetail(message, "content");
			String time = xml.getMessageDetail(message, "time");
			setText(time + "   " + title);
			StringBuilder sb = new StringBuilder(content);
			// String s=value.toString();
			sb.insert(0, "<html><p>");
			for (int i = sb.length(); i > 20; i -= 20) {
				sb.insert(i, "</p><p>");
			}

			sb.append("</p></html>");
			setToolTipText(sb.toString());

			return this;
		}
	}

	public static void main(String[] args) {
		JFrame frame = new JFrame();
		JPanel cPane = (JPanel) frame.getContentPane();
		cPane.setLayout(null);

		AixzCalendar calendar = new AixzCalendar();
		calendar.setBounds(2, 245, 240, 180);
		cPane.add(calendar);

		BacklogList backlogList = new BacklogList();
		backlogList.observe(calendar);
		backlogList.setBounds(2, 2, 240, 180);
		cPane.add(backlogList);

		frame.setSize(247, 600);
		frame.setResizable(true);
		frame.setTitle("sectetary");
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//
	}

}
